<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
// Test for https://bugs.webkit.org/show_bug.cgi?id=42941
function populateUndoStack(selection) {
    const div = selection.document.querySelector('div');
    selection.document.execCommand('insertParagraph');
    selection.setBaseAndExtent(div.firstChild, 0, div.firstChild, 2);
    selection.document.execCommand('bold');
    selection.document.execCommand('undo');
    selection.document.execCommand('undo');
}

test(() => assert_selection(
    '<div contenteditable>he|llo</div>',
    selection => populateUndoStack(selection),
    '<div contenteditable>he|llo</div>'),
    'undo');

test(() => assert_selection(
    '<div contenteditable>he|llo</div>',
    selection => {
        populateUndoStack(selection);
        selection.document.execCommand('redo');
        selection.document.execCommand('redo');
    },
    '<div contenteditable><b>^he|</b><div>llo</div></div>'),
    'redo');

test(() => assert_selection(
    '<div contenteditable>he|llo</div>',
    selection => {
        const div = selection.document.querySelector('div');
        populateUndoStack(selection);
        div.firstChild.remove();
        selection.document.execCommand('redo');
        selection.document.execCommand('redo');
    },
    '<div contenteditable><div>|hello</div></div>'),
    'redo with removing node');
</script>
